package sliding_window;

import java.util.HashMap;
import java.util.Map;

public class TotalFruit {

    // 水果成篮
    public int totalFruit(int[] fruits) {
        // 翻译： 找出最长子数组的长度，子数组中不超过两种类型的水果
        Map<Integer,Integer> hash = new HashMap<>();
        int ret = 0;
        for (int left = 0, right = 0; right < fruits.length; right++) {
            int in = fruits[right];
            hash.put(in, hash.getOrDefault(in, 0) + 1); // 进窗口
            while (hash.size() > 2) {
                int out = fruits[left];
                hash.put(out, hash.get(out) - 1); // 出窗口
                // 如果该种类的水果数量为 0 ，则删掉这种水果
                if (hash.get(out) == 0) {
                    hash.remove(out);
                }
                left++;
            }
            // 更新结果
            ret = Math.max(ret, right - left + 1);
        }
        return ret;
    }
}
